package leetcode.and;

/**
 * 给定范围 [m, n]，其中 0 <= m <= n <= 2147483647，返回此范围内所有数字的按位与（包含 m, n 两端点）
 * 解：这题就是求高位无变化数，找到递增过程中一直没有变化过的高位1
 * @author : zx
 * @version V1.0
 *
 */
public class int_and {

    public static int rangeBitwiseAnd(int m, int n) {
        int i = 0;
        while (m != n){
            m >>= 1;
            n >>= 1;
            i++;
        }
        return n<<i;
    }

    public static void main(String args[]){
        System.out.println(rangeBitwiseAnd(2147483646, 2147483647));
        System.out.println(rangeBitwiseAnd(5,7));
    }
}
